package iface.aplicativo.apresentacao.controle;

import iface.aplicativo.excecao.MensagemException;
import iface.aplicativo.negocio.aps.LoginAPS;
import iface.aplicativo.negocio.entidade.Usuario;
import iface.aplicativo.to.UsuarioLogadoTO;
import iface.aplicativo.util.BeanAbstrato;
import iface.arquitetura.comum.string.UtilString;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@ManagedBean
@SessionScoped
public class LoginBean extends BeanAbstrato implements Serializable {

	private static final long serialVersionUID = 4285899560377776076L;

	private Usuario usuario;

	@ManagedProperty(value = "#{loginAPS}")
	private LoginAPS service;

	public void setService(LoginAPS service) {
		this.service = service;
	}

	public String logar() throws Exception {

		try {
			Usuario usuarioLogado = this.service.logar(this.getUsuario());

			if (usuarioLogado != null) {
				this.limparCampos();
				return "/paginas/inicial";
			}

		} catch (final MensagemException e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_AVISO, "");
		} catch (final Exception e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_ERRO, "");
		}

		return null;
	}

	public String sair() throws Exception {
		HttpServletRequest req = (HttpServletRequest) FacesContext
				.getCurrentInstance().getExternalContext().getRequest();

		HttpSession session = req.getSession();

		session.setAttribute("userLoggedIn", null);
		session.invalidate();

		return "/login";
	}

	public String getNomeUsuarioLogado() throws Exception {
		HttpServletRequest req = (HttpServletRequest) FacesContext
				.getCurrentInstance().getExternalContext().getRequest();

		HttpSession session = req.getSession(false);

		if (session != null) {
			UsuarioLogadoTO usuario = (UsuarioLogadoTO) session
					.getAttribute("userLoggedIn");
			if (usuario != null && !UtilString.isVazio(usuario.getNmUsuario())) {
				return usuario.getNmUsuario();
			}
		}

		return "";
	}

	public void limparCampos() {
		this.setUsuario(null);
	}

	public Usuario getUsuario() {
		if (usuario == null) {
			usuario = new Usuario();
		}
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

}
